import pdfplumber

pdf = pdfplumber.open("The_Old_Man_of_the_Sea.pdf")
print(pdf.metadata)
print(pdf.pages)
print(type(pdf.pages[0]))

# pdfplumber.Page类是pdfplumber的核心，表示PDF文件中一页单独的内容。
# 主要成员变量
# .page_number 顺序页码，从第一页开始为1，第二页为2，以此类推
#.width 页面宽度
#.height 页面高度
# .objects/.chars/.lines/.rects/.curves /.images 这些属性都是列表，每个列表包含页面上嵌入的每个此类对象的一个字典

pdf = pdfplumber.open("test.pdf")
pages = pdf.pages
print(pages)
print(pages[0].page_number)
print(pages[0].width, pages[0].height)
print(pages[0].to_image())
print(pages[1].to_image())

# 提取单页文本

# pdfplumber库支持从任何给定的页面（pdfplumber.Page）中提取文本（包括裁剪和派生页面）。
# 在提取文本的基础功能外，同时支持保留文本布局，识别单词和搜索页面中的文本

# .extract_text()
# .extract_text_simple()
# .extract_words()
# .extract_text_lines()
# .search()
# .dedupe_chars()

# 获取单页文本
p1_text = pages[0].extract_text()
print(p1_text)

# 获取单页文本（保留布局）
p1_text = pages[0].extract_text(layout=True)
print(p1_text)

# 提取单页表格
# pdfplumber.Page对象可以调用以下方法
# .find_tables()
# .find_table()
# .extract_tables()
# .extract_table()
# .debug_tablefinder()

p1_table = pages[0].extract_tables()
print(p1_table)

# 获取单页所有表格
tables = pages[0].extract_tables()
print(len(tables))
print(tables)
p1_debug_table = pages[0].debug_tablefinder()
print(type(p1_debug_table))
print(p1_debug_table.tables)

import pandas as pd
df = pd.DataFrame(p1_table[1:], columns=p1_table[0])
print(df)

# 可视化调试页面

print(pages[0].to_image())
print(pages[1].to_image())
print(pages[1].images)
print(pages[1].images[0])
img = pages[1].images[0]
bbox = (img["x0"], img["top"], img["x1"], img["bottom"])
cropped_page = pages[1].crop(bbox)
print(cropped_page.to_image())
print(cropped_page.to_image(antialias=True))
print(cropped_page.to_image(resolution=1080))
im = cropped_page.to_image(antialias=True)
im.save("cropped_page.png")
